SUID & SGID & Sticky bit

UID, GID 만을 이용해 파일을 관리하는 것은 많은 작업을 필요로 한다.
리눅스는 각 파일 및 디렉토리에 대하여 세 개 비트의 추가적으로 이용해 저장한다.
- 세트 사용자 ID(SUID): 사용자가 파일을 실행할 때 프로그램은 파일 소유자의 권한 아래서 구동됨
- 세트 그룹 ID(SGID): 프로그램은 파일 그룹의 구너한 아래에서 구동(파일), 디렉토리에 새로운 파일이 만들어 졌을 때,
    해당 디렉토리 그룹을 기본 그룹으로 함
- 스티키 비트(sticky bit): 프로세스가 끝난 이 후, 파일은 메모리에 남아(stick) 있음
SGID
SGID는 파일 공유에서 중요한 역할을 수행한다.
mkdir shareDir
chgrp shareGroup shrareDir
chmod g+s shareDir
# chmod 2775 sharedDir
umask 002
cd shareDir
touch testFile.txt # shareGroup
SGID가 설정된 디렉토리 내에서 생성되는 파일은
사용자 계정의 기본 그룹이 아닌 디렉토리의 기본 그룹을 사용
(shareGroup의 모든 사용자는 해당 파일에 접근할 수 있다.)
SUID
슈퍼유저(root)만 접근할 수 있는 파일이나 명령에 대해 일반 사용자로 접근하는 것이 기능상 필요한 경우
SUID를 세트시킬 경우, 파일의 소유자(root) 권한으로 실행 가능하다.

bash 등의 쉘을 SUID 세트 시킬 경우, 일반 사용자가 해당 쉘을 통해 root 권한으로 모든 파일을 조작할 수 있기 때문에
보안상 매우 취약한 구조이다.

SUID는 파일 소유자 접근 권한의 실행 권한 자리에 실행 권한이 있을 경우 소문자 s, 실행 권한이 없을 경우 대문자 S로 표시
Sticky Bit
기타 사용자 접근 권한 자리에 실행 권한이 있으면 소문자 t, 실행 권한이 있는 경우 대문자 T로 표시

파일이나 디렉토리 생성은 누구나 할 수 있지만, 디렉토리 혹은 파일 소유자 또는 슈퍼 유저가 아닌 경우 파일이나 디렉토리를 삭제하거나 이름을 변경하지 못함

유닉스 운영체제에서 /var/tmp, /tmp 디렉토리들은 모든 퍼미션이 777로 설정되어 있다.(stick bit set 되어 있음)
모든 사용자(others)들이 파일을 제거할 수 있기 때문에 해당 파일이 사용중인 경우 서비스에 장애가 발생할 수 있다.

sticky bit 설정된 디렉토리 내에서는
1. 퍼미션이 777인 파일에 대해서 파일의 소유자만이 삭제할 수 있다.(수정 실행, 읽기는 모두 허용된다.)
2. sticky bit가 설정된 디렉토리 자체도 소유자만이 삭제할 수 있다.
3. root 권한의 경우 모든 처리가 허용된다.
┌──(csian㉿csian)-[/var]
└─$ ls -al /var/tmp /tmp -d
drwxrwxrwt 10 root root 4096 Mar  6 03:09 /tmp
drwxrwxrwt  6 root root 4096 Mar  6 03:09 /var/tmp